#!/usr/bin/env python
#Boa:PyApp:main

import consultasBD
import utiles
import sys
import os

modules = {}

def actualizarTablas():
    print "Agregando colores"
    try:
        consultasBD.begin()
        r1 = "INSERT INTO colores (idcolor,nombre) VALUES \n"
        r2 = "  ('104','Dorado'),('105','Dorado-Negro'),('106','Dorado-Rojo');\n"
        sql = r1+r2
        consultasBD.executaSinCommit(None, sql)
        consultasBD.commit()
        print "Colores creados"
    except:
        consultasBD.rollback()
    try:
        consultasBD.begin()
        r1 = "INSERT INTO proveedor(idproveedor,nombre,direccion,telefono, \n"
        r2 = "            email,saldo,parametro,localidad,cp,cuit,fax,contacto, \n"
        r3 = "            observacion,ocumulado,web,provincia,idregistro,barato) \n"
        r4 = "VALUES ('0','indefinido','','', \n"
        r5 = "        '@',0.00,'50','STA FE','3000','1','','', \n"
        r6 = "        '',0.0,'','STA FE','1','0') "
        sql = r1+r2+r3+r4+r5+r6
        consultasBD.executaSinCommit(None, sql)
        consultasBD.commit()
        print "Proveedor indefinido creado"
    except:
        consultasBD.rollback()
    try:
        consultasBD.begin()
        sql = "ALTER TABLE producto_talle_color ADD peso DECIMAL(4,2) NOT NULL DEFAULT '0'"
        consultasBD.executaSinCommit(None, sql)
        consultasBD.commit()
        print "Agregado campo 'peso' en tabla producto_talle_color"
    except:
        consultasBD.rollback()
    return

def generarCodSussan(descripcion,precio,grupo,temporada):
    cadenas = descripcion.split(" ")
    descri = ""
    for item in cadenas[:-1]:
        descri = descri + " " + item
    descri = descri[1:]
    sql = "SELECT codsussan FROM productos WHERE descri LIKE '%"+descri+"%' "
    resultado = consultasBD.ordenCruda(sql)
    if resultado == None or resultado == () or len(resultado) == 0:
        #el codsussan no existe, lo genero
        tablaSQL = "indices"
        camposSQL = "*"
        condicion = "1"
        resultado = consultasBD.executaSQL(None,camposSQL,tablaSQL,condicion)
        for r in resultado:
            nuevocodsussan = r[0]
        codsussan = int(nuevocodsussan)+1
        sql = "UPDATE indices SET ultimoidcod = %s" % str(codsussan)
        consultasBD.executa(None, sql)
        codsussan = int(nuevocodsussan)

        r1="INSERT INTO productos(codsussan,proveedor,descri,preciolt1,\n"
        r2="       preciolt2,estacion,anio,grupo,preciocompra,temporada) \n"
        r3="VALUES ('%s','%s','%s','%s','%s', \n" % (codsussan,'0',descri,precio,precio)
        r4="        '%s','%s','%s','%s','%s') \n" % ('Invierno','2013',grupo,precio,temporada)
        sql1=r1+r2+r3+r4

        r1="INSERT INTO producto_codartprov(codsussan,codartprov) \n"
        r2="VALUES ('%s','%s') " % (codsussan,codsussan)
        sql2=r1+r2

        consultasBD.begin()
        try:
            print "Se da el alta del codsussan",codsussan
            consultasBD.executaSinCommit(None, sql1)
            consultasBD.executaSinCommit(None, sql2)
        except:
            consultasBD.rollback()
            print "Error actualizando PRODUCTOS o CODARTPROV"
        consultasBD.commit()

    else:
        codsussan = resultado[0][0]

    return codsussan

def verificarPTC(sku):
    sql = "SELECT * FROM producto_talle_color WHERE id='%s'" % (sku)
    resultado = consultasBD.ordenCruda(sql)
    if resultado == None or resultado == () or len(resultado) == 0:
        return False
    return True

def verificarStock(sku):
    sql = "SELECT * FROM stock WHERE ptc='%s'" % (sku)
    resultado = consultasBD.ordenCruda(sql)
    if resultado == None or resultado == () or len(resultado) == 0:
        return False
    return True
        
def procesarArchivo(temporada):
    f=open("sku.csv","r")
    productos=f.readlines()
    consultasSQL = []
    for producto in productos:
        item=producto[:-1].split(",")
        sku = item[0]
        descripcion = item[1]
        grupo = item[2]
        color = item[3]
        talle = item[4]
        peso = item[5]
        precio = item[6]
        stock = item[7]
        #VERIFICANDO CODSUSSAN
        codsussan = generarCodSussan(descripcion,precio,grupo,temporada)
        #VERIFICANDO PTC
        existe = verificarPTC(sku)
        if not existe:
            print "alta ptc",
            r1="INSERT INTO producto_talle_color(id,codsussan,talle,color,temporada,peso) \n"
            r2="VALUES('%s','%s','%s','%s','%s','%s')" % (sku,codsussan,talle,color,temporada,peso)
            sql=r1+r2
            consultasSQL.append(sql)
        #VERIFICANDO STOCK
        existe = verificarStock(sku)
        if existe:
            print "update stock"
            sql="UPDATE stock SET stock='%s' WHERE id='%s'" % (stock,sku)
            consultasSQL.append(sql)
        else:
            print "insertando stock"
            r1="INSERT INTO stock(ptc,sucursal,stock) \n"
            r2="VALUES('%s','%s','%s')" % (sku,1,stock)
            sql=r1+r2
            consultasSQL.append(sql)

    #PROCESANDO SQL
    try:
        consultasBD.begin()
        for sql in consultasSQL:
            consultasBD.executaSinCommit(None, sql)
        consultasBD.commit()
    except:
        consultasBD.rollback()
        print "Error procesando",sql

def main(temporada):
    actualizarTablas()
    procesarArchivo(temporada)
    
if __name__ == '__main__':
    salida = False
    try:
        parametro = sys.argv[1]
    except:
        print "Debe introducir como parametro los numeros 1 o 2 que significan"
        print "           1) INVIERNO2013"
        print "           2) VERANO2013"
        salida = True

    if not salida:
        if (parametro == "1") or (parametro == "2"):
            if parametro == "1": temporada="INVIERNO2013"
            if parametro == "2": temporada="VERANO2013"
            main(temporada)
        else:
            print "Debe introducir como parametro los numeros 1 o 2 que significan"
            print "           1) INVIERNO2013"
            print "           2) VERANO2013"
            print
